import { defHttp } from "/@/utils/http/axios"
import { message } from "ant-design-vue"
import { useGlobSetting } from "/@/hooks/setting"
const globSetting = useGlobSetting()
const apiUrl = globSetting.apiUrl + globSetting.urlPrefix
enum Api {
  positionList = "/system-service/position/listPage",
  userList = "/system-service/user/list",

  roleList = "/system-service/role/list",
  queryDepartTreeSync = "/system-service/dept/listTreeSync",
  queryTreeList = "/system-service/dept/listTree",
  loadTreeData = "/system-service/category/loadTreeData",
  loadDictItem = "/system-service/category/loadDictItem/",
  getDictItems = "/infra-service/dictItem/listItem/",
  getTableList = "/system-service/user/queryUserComponentData",
  getCategoryData = "/system-service/category/loadAllData",
  adminResetPassword = "/auth-service/users/adminResetPassword",
  userResetPassword = "/auth-service/users/userResetPassword",
  // 获取移动端页面链接
  listDiyAppLink = "/auth-service/diy/appLink/list",
}

export const listDiyAppLink = (params) => {
  return defHttp.get({ url: Api.listDiyAppLink, params })
}

/**
 * 修改密码
 * @param params
 */
export const adminResetPassword = (params) => {
  return defHttp.post({ url: Api.adminResetPassword, params })
}
export const userResetPassword = (params) => {
  return defHttp.post({ url: Api.userResetPassword, params })
}

/**
 * 上传父路径
 */
export const uploadUrl = `${apiUrl}/infra-service/file/upload`

/**
 * 职务列表
 * @param params
 */
export const listPost = (params) => {
  return defHttp.get({ url: Api.positionList, params })
}

/**
 * 用户列表
 * @param params
 */
export const getUserList = (params) => {
  // defHttp.get({ url: Api.userList, params });
  console.log("request getUserList: ", params)
  return { records: [] }
}

/**
 * 角色列表
 * @param params
 */
export const getRoleList = (params) => {
  return defHttp.get({ url: Api.roleList, params })
}

/**
 * 异步获取部门树列表
 */
export const queryDepartTreeSync = (params?) => {
  return defHttp.get({ url: Api.queryDepartTreeSync, params })
}
/**
 * 获取部门树列表
 */
export const queryTreeList = (params?) => {
  return defHttp.get({ url: Api.queryTreeList, params })
}

/**
 * 分类字典树控件 加载节点
 */
export const loadTreeData = (params?) => {
  return defHttp.get({ url: Api.loadTreeData, params })
}

/**
 * 根据字典code加载字典text
 */
export const loadDictItem = (params?) => {
  return defHttp.get({ url: Api.loadDictItem, params })
}

/**
 * 根据字典code加载字典text
 */
export const getDictItems = (dictCode) => {
  return defHttp.get({ url: `${Api.getDictItems}?code=${dictCode}` }, { joinTime: false })
}
/**
 * 部门用户modal选择列表加载list
 */
export const getTableList = (params) => {
  return defHttp.get({ url: Api.getTableList, params })
}
/**
 * 加载全部分类字典数据
 */
export const loadCategoryData = (params) => {
  return defHttp.get({ url: Api.getCategoryData, params })
}
/**
 * 文件上传
 */
export const uploadFile = (params, success) => {
  return defHttp.uploadFile({ url: uploadUrl }, params, { success })
}
/**
 * 下载文件
 * @param url 文件路径
 * @param fileName 文件名
 * @param parameter
 * @returns {*}
 */
export const downloadFile = (url, fileName?, parameter?) => {
  return getFileblob(url, parameter).then((data) => {
    if (!data || data.size === 0) {
      message.warning("文件下载失败")
      return
    }
    if (typeof window.navigator.msSaveBlob !== "undefined") {
      window.navigator.msSaveBlob(new Blob([data]), fileName)
    } else {
      const url = window.URL.createObjectURL(new Blob([data]))
      const link = document.createElement("a")
      link.style.display = "none"
      link.href = url
      link.setAttribute("download", fileName)
      document.body.appendChild(link)
      link.click()
      document.body.removeChild(link) //下载完成移除元素
      window.URL.revokeObjectURL(url) //释放掉blob对象
    }
  })
}

/**
 * 下载文件 用于excel导出
 * @param url
 * @param parameter
 * @returns {*}
 */
export const getFileblob = (url, parameter) => {
  return defHttp.get(
    {
      url: url,
      params: parameter,
      responseType: "blob",
    },
    { isTransformResponse: false }
  )
}

/**
 * 【用于评论功能】自定义文件上传-方法
 */
export const uploadMyFile = (url, data) => {
  return defHttp.uploadMyFile(url, data)
}
